package com.monitor.network;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 设备使用记录上传服务
 * 定时上传设备使用记录到服务器
 */
public class DeviceUsageService {
    // 上传间隔时间（分钟）
    private static final long UPLOAD_INTERVAL_MINUTES = 1;
    
    private final ScheduledExecutorService scheduler;
    private final SimpleDateFormat dateFormat;
    private Long deviceId; // 设备ID，从注册信息中获取
    
    /**
     * 构造函数
     * 
     * @param deviceId 设备ID
     */
    public DeviceUsageService(Long deviceId) {
        this.deviceId = deviceId;
        this.scheduler = Executors.newScheduledThreadPool(1);
        this.dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    }
    
    /**
     * 启动设备使用记录上传服务
     */
    public void start() {
        // 立即执行一次上传
        uploadUsageRecord();
        
        // 设置定时任务，每20分钟执行一次
        scheduler.scheduleAtFixedRate(
                this::uploadUsageRecord,
                UPLOAD_INTERVAL_MINUTES,
                UPLOAD_INTERVAL_MINUTES,
                TimeUnit.MINUTES
        );
        
        System.out.println("设备使用记录上传服务已启动，每" + UPLOAD_INTERVAL_MINUTES + "分钟上传一次设备使用记录");
    }
    
    /**
     * 停止设备使用记录上传服务
     */
    public void stop() {
        scheduler.shutdown();
        System.out.println("设备使用记录上传服务已停止");
    }
    
    /**
     * 上传设备使用记录
     */
    private void uploadUsageRecord() {
        try {
            // 获取API URL
            String apiUrl = ApiConfig.getDeviceUsageLogApiUrl();
            
            // 构建请求JSON数据
            JSONObject requestData = new JSONObject();
            
            // 设备ID - 这是唯一必需的参数
            requestData.put("deviceId", deviceId);
            
            // 记录时间 - 使用ISO 8601格式
            /*String recordTime = dateFormat.format(new Date());
            requestData.put("recordTime", recordTime);
            
            // 创建人信息 - 使用系统默认值
            requestData.put("createId", 1L); // 默认创建人ID
            requestData.put("createName", "系统"); // 默认创建人名称
            
            // 创建时间 - 使用当前时间
            String createTime = dateFormat.format(new Date());
            requestData.put("createTime", createTime);
            
            // 使用状态 - 表示设备正在使用中
            requestData.put("usageStatus", "active");*/
            
            System.out.println("发送设备使用记录请求: " + requestData.toJSONString());
            
            // 发送POST请求
            String response = HttpClient.post(apiUrl, requestData.toJSONString());
            
            System.out.println("服务器响应: " + response);
            
            // 解析响应
            if (response != null && !response.isEmpty()) {
                try {
                    JSONObject responseJson = JSON.parseObject(response);
                    Integer code = responseJson.getInteger("code");
                    String msg = responseJson.getString("msg");
                    
                    if (code != null && code == 200) {
                        System.out.println("设备使用记录上传成功");
                    } else {
                        System.err.println("设备使用记录上传失败: " + msg);
                    }
                } catch (Exception e) {
                    System.err.println("解析服务器响应失败: " + e.getMessage());
                }
            } else {
                System.err.println("服务器响应为空");
            }
            
        } catch (Exception e) {
            System.err.println("设备使用记录上传过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}